ASMԳ

MOV ָΪ˫ָ,бһǼĴ.
MOV  DST , SRC    //  Byte / Word
ִв: dst = src
1.ĿͨüĴ, 洢ԪͶμĴ(CSμĴ).
2.ֱͶμĴ
3.洢ԪֱӴ
4.μĴֱӴϢ

PUSH ջָPOPջָ: ջ"ȳ"ķʽݲ.
PUSH   SRC    //Word
ջĲ⣬ΪͨüĴμĴ(ȫ)ʹ洢.
ջʱλֽջλֽںջ.
POP     DST    //Word
ջCSμĴ, ΪͨüĴ,μĴʹ洢.
ִPOP   SSָ,ջڴ洢λҪı.
ִPOP  SP ָ,ջλҪı.

XCHG(eXCHanG)ָ: ֵ.
XCHG   OPR1, OPR2     //Byte/Word
ִв: Tmp=OPR1       OPR1=OPR2        OPR2=Tmp
1.һڼĴ
2.μĴ
3.洢洢֮䲻ܽ.

XLAT(TRANSLATE)ָ: һִתΪһִ.
XLAT   (OPR ѡ)   //Byte
ִв: AL=(BX+AL)
ִָʱֻʹԤѴBXеı׵ַ,ִк,ALҪתĴ.

LEA(Load Effective Address) ЧַͼĴָ
LEA     REG , SRC              //ָԴSRCЧַ͵ָļĴ.
ִв: REG  = EAsrc 
ע: SRCֻǸѰַʽĴ洢,REGֻ16λĴ
MOV     BX , OFFSET OPER_ONE ȼ LEA     BX , OPER_ONE
MOV  SP , [BX]  //BXѰ̵ַĶ洢ԪSP
LEA   SP , [BX]  //BXΪ洢ЧַSP

LDS(Load DS with pointer)ָͼĴDSָ
LDS    REG ,  SRC   //ָSIĴ
ִв: REG=(SRC), DS=(SRC+2)        //SRCָǰ洢ԪָָļĴУ洢ԪDSμĴС

LES (Load ES with pointer) ָͼĴESָ
LES    REG , SRC        //ָDIĴ
ִв: REG=(SRC) , ES=(SRC+2) //LDSͬ,֮ͬǽESDS.

LAHF ( Load AH with Flags ) ־λAHָ
LAHF              //PSWĴеĵ8λ״̬־()AHӦλ, SFD7λ, ZFD6λ......
ִв: AH=PSWĵλֽڡ

SAHF ( Store AH into Flags ) AHͱ־Ĵָ
SAHF               //AHĴӦλ͵PSWĴĵ8λӦλ, AHD7λSF, D6λZF......
ִв: PSWĵλֽ=AH

PUSHF ( PUSH the Flags) ־ջָ
PUSHF         //־Ĵֵѹջ, ͬʱջָSPֵ2
ִв: SP=SP-1,(SP)=PSWĸ8λ,  SP=SP-1, (SP)=PSWĵ8λ

POPF ( POP the Flags ) ־ջָ
POPF            //PUSHF෴, ӶջĶֽ͵PSWĴ, ͬʱջֵָ2
ִв:  PSW8λ=(SP), SP=SP+1,   PSW8λ=(SP) , SP=SP+1

ָ(IN,OUT)ֻʹۼAXALⲿ豸Ķ˿ڴϢ.
IN (INput)ָϢI/Oͨۼ͵CPU
IN    AL , PORT         //ֱӵֽ,PORT˿ڱ(˿ڵַ),ֻȡ 00H ~ 0FFH256˿ڵַ.
IN    AX , PORT        //ֱӵ,AX洢˿ڵַPORT+1,PORT
IN    AL , DX             //ӵֽ,˿ڵַΧͨDXΪ0000H ~ 0FFFFH65536˿ڵַ
IN    AX , DX             //ӵ
OUT( OUTput)ָ ϢCPUͨۼ͵I/O
OUT    PORT , AL        //ֱӵֽ,PORT涨INָͬ.
OUT    PORT , AX
OUT    DX , AL            //ӵֽ
OUT    DX , AX
MOV   AL,05H     OUT  27H, AL    //ֽ05H͵ַ27HĶ˿

ADD(ADD)ӷָ
ADD     DST , SRC      //Byte/Word
ִв: dst=dst+src
1.洢ͨADDֱָ, DST SRCһͨüĴ.
2.μĴΪSRC DST.
3.Ӱ־λAuxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag Zero Flag ,ʾ
CF ЧλǷн()λõģн()λʱCF=1, ޽()λʱCF=0. 
OF ݲķż仯õģķͬ,ķ֮෴ʱOF=1, Ϊ0. 
ZF ݽã0ʱZF=0, 0ʱZF=1 
SF ݽλãλΪ0, SF=0. 
AF ʱD3ǷD4()λãн()λʱAF=1, ޽()λʱAF=0 
PF ݽ1ĸʱΪã1ĸΪʱPF=0, ΪżʱPF=1 

ADC( ADd with Carry)λӷָ
ADC     DST , SRC  //Byte/Word
ִв: dst=dst+src+CF  //ADD֮ͬǻҪϽλ־λֵ.

INC ( INCreament) 1ָ
INC    OPR    //Byte/Word
ִв: OPR=OPR+1
1.OPRǼĴʹ洢, ͶμĴ
2.Ӱ־λOF,SF,ZF,PF AF,ӰCF.

SUB ( SUBtract ) λļָ
SUB    DST , SRC    //Byte/Word
ִвdst=dst - src
1.DSTSRCѰַʽ涨ADDͬ.
2.Ӱȫ־λ.(жϱ־λμADD)

SBB ( SuBtract with  Borrow) λָ
SBB    DST , SRC        //Byte/Word
ִвdst= dst - src - CF

DEC ( DECrement ) 1ָ
DEC    OPR    //Byte/Word
ִвOPR = OPR - 1  //CF־λ, ־λӰ.

NEG ( NEGate ) ָ
NEG    OPR
ִвopr = 0- opr //λ󷴺ĩλ1.

CMP ( CoMPare ) Ƚָ
CMP    OPR1 , OPR2 
ִвOPR1 - OPR2  //SUBָһִ, .
Ƚ ޷ з
A=B  ZF=1  ZF=1 
A>B  CF=0 && ZF=0 SF^OF=0 && ZF=0 
A<B  CF=1 && ZF=0 SF^OF=1 && ZF=0 
A>=B  CF=0 || ZF=1 SF^OF=0 || ZF=1 
A<=B  CF=1 || ZF=1 SF^OF=1 || ZF=1 

MUL ( unsigned  MULtiple ) ޷˷ָ
MUL    SRC   //Byte/Word    .
ִвByte  =>   AX= AL *src    //ֽʱĿĲAL, ˻AX
         Word =>   DX=AX *src    //ʱĿĲAX, DXų˻ĸλ, AXų˻ĵλ
1.Ŀۼ AX AL,ָвд
2. ԴSRCͨüĴ͸ѰַʽĴ洢, ԲμĴ.

IMUL (sIgned  MULtiple) з˷ָ
IMUL    SRC    //MULָͬ,Ǵ

DIV ( unsigned DIVide) ޷ָ
DIV     SRC        //Byte/Word    : SRCĹ涨ͬ˷ָMUL
ִвByte => AX / src     //ֽʱĿĲAX,AL ,AH
         Word=> DX,AX /src //ʱĿĲDXλֺAXλ,AX ,DX
洢ָͣBYTE PTR src  WORD PTR src

IDIV (sIgned DIVied) зָ
IDIV     SRC        //Byte/Word        DIVָͬ,Ǵ

CBW (Convert Byte to Word) ֽתΪָ
CBW
ִв: ALеķλ(D7)չ8λAH,ALеD7=0AH=00H,ALеD7=1,AH=FFH.

CWD (Convert Word  to Double word) תΪ˫ָ
CWD
ִв: AXеķλ(D15)չ16λDX,AXеD15=0DX=0000H,AXеD15=1,DX=FFFFH
ʮƵָ
мʱ,ȰʮתΪ,ٽж,󽫽תΪʮ.
ڼ,4λʾһλʮ,ִΪBCD ( Binary Coded Decimal ).
BCDֳ8421,PC,BCDѹBCDͷѹBCDָʽʾ.
ѹBCD4λʾһʮ,ʮʽΪһ˳4λΪһ.
ѹBCD8λΪһʾһʮ,8λеĵ4λʾ8421BCD,4λû.
ѹBCDָ

DAA (Decimal Adjust for Addition) ӷʮƵָ
DAA
ִв:ִ֮ǰִADDADCָ,ӷָѹBCD,ѽ滰ALĴ.

DAS (Decimal Adjust for Subtraction) ʮƵָ
DAS
ִв:ִ֮ǰִSUBSBBָ,ָѹBCD,ALĴ.
ѹBCDָ

AAA (ASCII Adjust for Addition) ӷASCIIָ
AAA
ִв:ִ֮ǰִADDADCָ,ӷָѹBCD,ѽ滰ALĴ.

AAS (ASCII Adjust for Subtraction) ASCIIָ
AAS
ִв:ִ֮ǰִSUBSBBָ,ָѹBCD,ALĴ.

MOVS ( MOVe String) ָ
MOVB         //ֽڴ    DF=0, SI = SI + 1 , DI = DI + 1 DF = 1 , SI = SI - 1 , DI = DI - 1
MOVW        //ִ      DF=0, SI = SI + 2 , DI = DI + 2 DF = 1 , SI = SI - 2 , DI = DI - 2
ִв[DI] = [SI] ,λDSεSIָĴ洢Ԫֽڻִ͵λESεDI ָĴ洢Ԫ,޸SIDI, ӶָһԪ.
ִиָ֮ǰ,ԤSIDIĳֵ,STDCLDDFֵ.
MOVS    DST , SRC    //ͬ,,DSTSRCֻͼ,ʹѰַʽȷ.
1.ĿĴڸӶ,ES:[DI]
2.ԴʹöοԽǰ׺,ƫƵַ[SI].

STOS (STOre into String) 봮ָ
STOS    DST
STOSB         //ֽڴ   ( DI ) = AL
STOSW        //ִ     ( DI ) = AX
ִƷALAXеݴDIָĸӶεֽڻֵԪ,DFֵ޸ļ޸DI.
1.ִиָ֮ǰ,ҪԤȴAXAL,ԤDIĳֵ.
2.DIָĴ洢ԪֻڸӶ,ES:[DI]

LODS ( LOaD from String ) Ӵȡָ
LODS    SRC
LODSB         //ֽڴȡ    AL=(SI)
LODSW        //ִȡ      AX= (SI1) (SI)
ִвSIָݶֽڻֵԪALAX,DFֵ޸SI.
1.ִиָ֮ǰ,Ҫȡݱڴ洢Ԥȶ(DBDW),ԤSIĳֵ.
2.ԴʹöγԽǰ׺ıݴ洢Ķ.

REP (REPeat)ظǰ׺
REP    String Primitive //:String PrimitiveΪMOVS,STOSLODSָ
ִвʹREPǰ׺Ĵָظִ,ÿִһCX=CX-1,ֱCX=0ʱ˳REP.
־

CLD (CLear Direction flag) ־ָ
CLD
ִвDF=0, [SI],[DI]ִ

STD (SeT Direction flag) ÷־ָ
STD
ִвDF=1, [SI],[DI]ִм

CMPS (CoMPare String) Ƚָ
CMPS       SRC ,  DST
CMPSB            //ֽڴȽ   (SI)-(DI)
CMPSW          //ִȽ     (SI+1)(SI) - (DI+1)(DI)
ִвSIָݶеһֽڻDIָĸӶеһֽڻ,,ֻݽñ־λ.

SCAS (SCAn String ) ɨָ
SCAS        DST
SCASB
SCASW
ִвAXALDIָڸӶеһֽڻ,,ݽñ־λ.

AND, OR , XOR  TEST˫ֽڲָ,ѰַʽĹ涨ָͬ.
NOTǵֽڲָ,ʹ.
߼ǰλв,ֵ:
AND (λ&) OR ( λ| ) XOR  ( λ^ )  
1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 0
1 & 0 = 0 1 | 0 = 1 1 ^ 0 = 1
0 & 1 = 0 0 | 1 = 1 0 ^ 1 = 1
0 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0
A߼ָ
AND (and) ߼ָ
AND    DST , SRC           //Byte/Word
ִвdst = dst & src
1.ANDִָк,ʹCF=0,OF=0,AFλ޶,ִָнӰSF,ZFPF־λ.
2.ANDָ÷AĳЩλ,ʹĳЩλΪ0.
ALĸ4λ:4λ0000B,4λ1111B
MOV AL , 39H     //AL= 0011 1001B[39H]
ADD AL , 0FH    // AL= 0000 1001B[09H]  0011 1001B[39H]  &  0000 1111B[0FH] = 0000 1001B[09H]
3.ANDָ÷B:ȡĳһλֵ(TEST)
OR (or) ߼ָ
OR    DST ,  SRC         //Byte/Word
ִвdst = dst | src
1.ORִָк,ʹCF=0, OF=0, AFλ޶,ִָнӰSF, ZFPF־λ.
2.ڽĳЩλ1.
ALĵ5λ1:
MOV AL , 4AH    // AL=0100 1010B[4AH]
OR    AL , 10H      // AL=0101 1010B[5AH]   0100 1010B[4AH]  |  0001 0000B[10H] =0101 1010B [5AH]
XOR (eXclusive OR) ߼ָ
XOR    DST , SRC        //Byte/Word
ִвdst = dst ^ src
1.XORָʹĳ,ͬʱʹCF=0,λ־.
2.XORָʹĳЩλάֲ '0' ,ҪʹĳЩλȡ '1'.
ALĸ4λάֲ,4λȡ
MOV AL, B8H    //AL=1011 1000B[B8H]
XOR  AL, 0FH    //AL=1011 0111B[B7H] 1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]
ĳһǷһȷȣ
XOR    AX , 042EH
JZ       ....   //AX==042EH, ZF=TRUE(1), ִJZ...
NOT (not) ߼ָ
NOT    OPR                        //Byte/Word
ִвopr = ~opr   // ~ 01100101 [65H] =10011010 [9AH]
1.ʹμĴ,ʹͨüĴ͸ַʽѰַĴ洢.
2.NOTָӰκα־λ
ALλȡ
MOV AL,65H    //AL=0110 0101B[65H]
NOT AL             //AL=1001 1010B[9AH]   ~ 0110 0101B[65H]=1001 1010B[9AH]
TEST (test) ָ
TEST    OPR1 , OPR2        //Byte/Word
ִвopr1 & opr2
1.Ľ,Ӱ־λPF,SFZF,ʹCF=0, OF=0,AFλ޶.
2.TESTָڲıԭеĲ,ĳһλĳλǷ.ֻҪԵĲӦλΪ1,λΪ0,ж־ZFֵ.
ĳλǷΪ1
ԵĲӦλΪ1,λΪ0,TESTָ,λΪ1 JNZ...
TEST AL , 0000 00001B   //ALλǷΪ1:: ԵĲӦλΪ1,λΪ0,ִTESTָ 
JNZ   THER    //λΪ1, ZF=FALSE(0), ִJNZ THER, ִһָ.
ߣȶԲ,ԵĲӦλΪ1,λΪ0,TESTָ,λΪ1JZ...
MOV    DL , AL    //AL ͵DL,ҪǲҪӰALֵ.   ²ALb2λǷΪ1
NOT    DL     //ȶԲ
TEST    0000 0100B //ԵĲӦλΪ1,λΪ0,ִTESTָ
JZ    THER        //ALb2λΪ1,ZF=TRUE(1), ִJZ    THER

Bλָ[еλָӰ־λCFOFPFSFZF.AF޶.]
ѭ߼λѲ޷λ.
SHL ( SHift logical Left )߼ָ
SHL    OPR , CNT     //Byte/Word
ִвʹOPRCNTλ,ʹCNTλΪȫ0.
1.OPRʹμĴ,ʹͨüĴ͸ַʽѰַĴ洢.
2.λCNT.ÿνOPRλƳƵCF,λ0.
MOV  CL , 7            //λ, ԤλCL
SHL    DX ,  CL       //CNTȡ1CLĴ
SHR (SHift logical Right) ߼ָ
SHR    OPR , CNT        //Byte/Word
ͬSHL,ÿνOPRλD0ƳƵCF.λ0.
ѭλзλ.
SAL (Shift Arithmetic Left) ָ
SAL    OPR , CNT         //Byte/Word
SALָSHLָȫͬ
SAR(Shift Arithmetic Right) ָ
SAR    OPR , CNT        //Byte/Word
SARָÿλʱ,λθλͬʱλֵ,λD0ƳƵCF.
ѭλָ
ROL ( ROtate Left) ѭָ
ROL    OPR , CNT        //Byte/Word
ÿλʱ,λƳͬʱƵCFλD0.
ROR (ROtate Right)ѭָ
ROR    OPR,CNT    //Byte/Word
ÿλʱ,λD0ƳͬʱƵCFλ.
λѭλָ
RCL (Rotate Left through Carry)λѭָ
RCL    OPR,CNT     //Byte/Word
RCR (Rotate Right through Carry)λѭָ
RCR    OPR ,CNT       //Byte/Word

ָ
CLC (CLear Carry) λλ0ָ
CLC        //ִв,CF=0
CMC (CoMplement Carry) λλָ
CMC    //ִв,CF=!CF
STC (SeT Carry) λλ1ָ
STC    //ִв,CF=1
NOP (No Operetion) ޲ָ
NOP    //ָִκβ,ռһֽڵԪ
HLT (HaLT) ָͣ
HLT
ִв,ʹͣ,ʹCPUͣ״̬,Եȴһⲿжϵ,жϽ,ִ,CPU.

JMP ( JuMP ) תָ
  ʽ   ִв 
ֱӶת JMP    SHORT OPR  IP=IP+8 λƫ
ֱӽת JMP    NEAR PTR OPR IP=IP+16λƫ
ڼת JMP    WORD PTR OPR IP=(EA)
μֱת JMP    FAR PTR OPR IP=OPR ƫƵַ, CS=OPR εַ
μת JMP    DWORD PTR OPR IP=(EA),CS=(EA+2)
1.תƵָĵַȥִдӸõַʼָ.
2.תָͬһεķΧڽת,ֻıIPĴ.
3.μתҪתƵһִг,ʱҪıIPĴCSμĴ.
תָһָõ(־λ)жϲ.
־λZFSFOF PF CF״̬0 FALSE1 TRUE)10ֲ.
Name  Flag Flag == TRUE [1]  Flag ==FALSE [ 0] 
Zero Falg ZF JZ OPR  //Ϊת JNZ OPR  //Ϊת 
Sign Falg SF JS OPR  //Ϊת JNS OPR  //Ϊת 
Overflow Flag OF JO OPR  //ת JNO OPR  //ת 
Parity Flag PF JP OPR  //Ϊżת JNP OPR  //Ϊת 
Carry Flag CF JC OPR  //нλת JNC OPR  //޽λת 
Ƚϣ
  ָ  ָ  
A < B  JC  CF==1  JL SF^OF==1 && ZF==0 
A  B JNC CF==0 JNL SF^OF==0  ||  ZF==1 
A  B JNA CF==1 || ZF==1 JLG SF^OF==1  ||  ZF==1 
A > B JA CF==0 && ZF==0 JG SF^OF==0 && ZF==0 
CXתָ
JCXZ    OPR          //CX==0ʱת

LOOP(LOOP)ѭָ
LOOP           OPR CX  0               //OPRڳʵǸ 
LOOPZ        OPR ZF == 1 && CX  0 
LOOPNZ     OPR ZF == 0 && CX  0 
ִв: ִCX=CX-1,ټĲ,IP=IP+չD8,˳ѭ.
̵üָ

CALL (CALL) ̵ָ
CALL    DST            //DSTڳʵӳ
ִвȽ̵ķصַ(CALLһָ׵ַ)ջ,ȻתƵڵִַӳ.
÷ʽ ʽ ϵ㱣ջ ڵַ 
ֱ CALL  NEAR  PTR  PR1 (SP-1)(SP-2)IP , CSջ CSֲֵ,IPDST 
ڼ CALL  WORD PTR  (EA) (SP-1)(SP-2)IP , CSջ CSֲֵ,IP(EA) 
μֱ CALL  FAR  PTR  PR1 (SP-1)(SP-2)CS , (SP-3)(SP-4)IP IPDSTƫƵַ,CSDSTεַ 
μ CALL  DWORD PTR  (EA) (SP-1)(SP-2)CS , (SP-3)(SP-4)IP IP(EA),CS(EA+2) 
עΪ˱Ƕڵ,ʹNEAR PTRԲ˵.

RET(RETurn)ӳ򷵻ָ
RET    
RET    EXP        //
ӳ򷵻ָRETӳĩβ,ʹӳִȫ󷵻ִбϺĳ.صַӳʱջĶϵַ-IPIPCS.